package com.fxp.project.jiuselu.web.models.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fxp.project.jiuselu.web.business.v1.pojo.InviteUserInfoVo;
import com.fxp.project.jiuselu.web.business.v1.pojo.UserInfoVo;
import com.fxp.project.jiuselu.web.models.user.entity.JslUser;
import com.fxp.project.jiuselu.web.models.user.vo.JslUserSaleInfoVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.security.core.parameters.P;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author Jason.Wang
 * @since 2021-11-01
 */
public interface JslUserMapper extends BaseMapper<JslUser> {

    /**
     * getUserInfoVoByUserId: 通过当前的用户UserId获取用户信息<br/>
     *
     * @param userId
     * @return
     * @author Kai.Wang
     * @date 2021/11/1 14:05
     */
    UserInfoVo getUserInfoVoByUserId(Long userId);

    /**
     * selectByInviteCode: 根据用户的邀请码获取用户信息<br/>
     *
     * @param inviteCode
     * @return
     * @author Kai.Wang
     * @date 2021/11/1 14:33
     */
    JslUser selectByInviteCode(String inviteCode);

    JslUser selectNewUser();

    /**
     * selectByUserPhone: 通过当前的手机号码获取用户信息<br/>
     *
     * @param userPhone
     * @return
     * @author Kai.Wang
     * @date 2021/11/1 14:42
     */
    JslUser selectByUserPhone(String userPhone);

    JslUser selectByUserPhoneAndLevel(@Param("userPhone") String userPhone,@Param("level") Integer level);

    /**
     * 通过手机号查找邀请人
     * @param phone
     * @return
     */
    public String checkPhone(String phone);

    /**
     * getUserInfoVoListByInviteId: 根据当前用户的Id获取被邀请人列表<br/>
     *
     * @param userId
     * @return
     * @author Jason.Wang
     * @date 2021/12/5 15:02
     */
    List<UserInfoVo> getUserInfoVoListByInviteId(Long userId);

    /**
     * 更新分润金额
     *
     * @param userId
     * @param userMoney
     * @param distributeMoney
     */
    void updateShareProfit(@Param("userId") Long userId, @Param("userMoney") BigDecimal userMoney, @Param("distributeMoney") BigDecimal distributeMoney);

    /**
     * @Description 通过邀请码查询邀请人信息
     * @Date 15:54 2022/1/3
     * @Param [inviteCode]
     * @return com.fxp.project.jiuselu.web.business.v1.pojo.InviteUserInfoVo
     * @Author M_
     **/
    InviteUserInfoVo selectUserByInviteCode(@Param("inviteCode") String inviteCode) ;

    /**
     * 通过邀请码查找邀请人信息
     * @param inviteCode
     * @return
     */
    public List<UserInfoVo> selectuserByInvite(String inviteCode);

    /**
     * @Description 用户设置邀请人
     * @Date 16:07 2022/1/3
     * @Param [inviteUserId, userId]
     * @return void
     * @Author M_
     **/
    void setuserInviteUser(@Param("inviteUserId") Long inviteUserId,@Param("userId") Long userId) ;
    /**
     * @Description 更新邀请人数+1
     * @Date 17:08 2022/1/3
     * @Param [userId]
     * @return void
     * @Author M_
     **/
    void updateInviteNum(@Param("userId") Long userId) ;

    List<JslUser> selectUserByInviteId(@Param("inviteIdList") List<Long> inviteIdList) ;

    /**
     * @Description 通过用户id 喝密码 查询用户
     * @Date 12:37 2022/1/10
     * @Param [userId, pwd]
     * @return com.fxp.project.jiuselu.web.models.user.entity.JslUser
     * @Author M_
     **/
    JslUser selectUserByPwd(@Param("userId") Long userId,@Param("pwd") String pwd) ;

    /**
     * 通过userid查找余额
     */
    BigDecimal selectMoneyByUserId(Long userId);


    int updateUserMoneyById(@Param("userMoney") BigDecimal userMoney,@Param("userId") Long userId);

    /**
     * 查询新用户,7天内为新用户
     */
    JslUser selectNewUserByUserId(Long userId);

    @Select("select sale_name from jsl_sale_info where bind_id = #{bindId} and status =1")
    String findSaleNameByUserId(Long bindId);

    List<JslUserSaleInfoVo> selectUserAndSaleInfo(Long userId);
}
